package cn.tedu.inherit;
/**本类用于测试【继承中构造方法】的使用*/
//总结:
/*1.子类创建对象时,默认会访问父类的无参构造
2.在[子类构造方法]中的第一行都有一条【默认语句super()--调用父类的无参构造】
3.当【父类没有无参构造】时,可以通过【super调用父类的其它构造方法】
4.构造方法【不可以被继承】!
*/
public class TestExetends3 {
    public static void main(String[] args) {
        //1.创建父类对象【含参】
        Father3 f = new Father3("好吃啊");//没有成员变量/属性，不用进行打印输出；就能显示
        //2.创建子类对象【无参】
        Son3 s = new Son3();

    }
}
//一、创建父类 & 构造方法
class Father3{
    /**构造方法可以被继承吗?--父类的构造方法不可以被子类继承!!!
     * 语法结构的要求:构造方法的方法名需要与本类类名一致,子类不能出现父类类名相同的构造方法。
     * */
    //1.手动添加父类的无参构造
    public Father3() {
        System.out.println("我是父类的无参构造");
    }
    //2.创建父类的含参构造======>【没有属性/成员变量】
    public Father3(String s) {
        System.out.println("我是父类的一个含参构造"+s);//s=="好吃啊"--->父类对象的参数
    }
}

//二、创建子类 & 构造方法
class Son3 extends  Father3{
    //1.创建子类的无参构造
    public Son3() {
        super("好吃啊");//子类的无参调用父类的有参
        System.out.println("我是子类的无参构造");
    }
    //2.创建子类的含参构造
    public Son3(String s) {
        super(s);
        System.out.println("我是子类的一个含参构造");
    }
}
/**1.子类的构造方法中,默认存在super(),所以创建子类对象时,默认会调用父类的无参构造
 * 2.同时自动调用的子类的无参构造
 * 3.但是继承后,会【先调用父类的无参构造】,【再执行自己构造方法中的功能】
 *4.当父类中没有无参构造时,子类调用的是父类的含参构造
 * */

/**子类继承父类中，【构造方法可以调用，但不被继承】。
 * 父类和子类均没有的全局变量（属性/成员变量）和局部变量。
 * 构造方法：与类同名，无返回值。
 * 【创建对象时，即可执行父类和子类的输出语句】
 */